iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
Software Development

玩轉C# 進階學習之旅系列 第 25

玩轉C#之【單元測試】

  • 分享至 

  • xImage
  •  

介紹

通常我們程式寫完之後,要確保程式沒問題我們就會進行測試

在這裡我們將測試分兩大類:

  • 單元測試(Unit Test,UT):對程式碼的最小單位所進行的測試
  • 整合測試(Integration Test):系統/模組之間的測試,通常會接觸到真實系統

在這裡只會簡單介紹一下單元測試的概念

這裡在將單元測試講白話一點,我們會寫一個程式用來測試我們寫的每一個function 是否正確

假設我們寫好一段程式sum功能

class Computer
{
    //加法計算
	public int sum(int x, int y)
	{
		return x + y;
	}
}

我們可能會類似這樣寫測試程式

void sum_輸入1_1輸出2
{
   //arrang
   var target =new Computer();
   int x =1;
   int y =1;
   int expected = 2;
   //act
   int actual =target.sum(x,y);
   //assert
   //這段意思就是 如果expected等於actual 則表示測試成功,如果不等於就會顯示測試失敗
   Assert.AreEqual(expected,actual); 
}

測試寫完後會這樣執行:

並且會顯示測試結果:

單元測試的特性

在撰寫測試程式時需要保持以下特性:
• Fast 快速
• Independent 獨立
• Repeatable 可重複
• Self-Validating 自我驗證(可反應驗證結果)
• Timely 及時

Fast 快速

每個單元測試的執行時間應該要很短。
一個單元測試的執行時間單位都是毫秒,如果有某個單元測試所執行的時間超過數秒,就要做檢查。

因為每次修改程式的時候都應該執行測試,確保沒有被改壞,因此如果時間跑太長,你每次改好一段Code就要等好幾分鐘,豈不是浪費生命都在等待。

Independent 獨立

單元測試不與外部資源相依,單元測試之間也不能夠相依,要能夠單獨針對測試目標進行測試。
外部資源(檔案、資料庫、網路、服務、元件等),單元測試都是個別獨立、無順序性、執行結果不會影響其他測試。

假設在一個沒網路的環境是不應該影響到測試結果。

Repeatable 可重複

所有的單元測試都可重複被執行,且不影響預期的結果。
無論執行多少次,測試的結果都是一樣的

不應該出現會被環境影響到,或者亂數

Self-Validating:自我驗證(可反應驗證結果)

單元測試執行不論成功或失敗,都應該要能夠從測試報告裡直接瞭解其意義或失敗的原因。

Timely:及時

單元測試應該在產品程式碼完成的當下就可以驗證執行結果是否,符合預期

關於Muck、Test Framewor..等等之後會專門寫一篇文章跟大家講解

參考資料

一起設計出可被單元測試的程式碼吧!

本篇已同步發表至個人部落格
https://moushih.com/2022ithome25/


上一篇
玩轉C#之【CLR】
下一篇
玩轉C#之【爬蟲】
系列文
玩轉C# 進階學習之旅31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言